자동으로 r20210301판 문서를 읽어왔습니다.
Swift(프로그래밍 언어)
덤프버전 : r20210301
1. 개요[편집]
print("Hello, world!")
//Swift 5로 작성한 "Hello world!"
[각주]
Apple WWDC 2014에서 공개된 프로그래밍 언어.
이름의 유래는 신속한, 재빠른이라는 뜻의 영단어인 Swift이다. 로고는 Swift라고 불리우는 칼새[2] 를 상징하는 것으로 추정된다.
기존 Objective-C의 단점을 보완하고, LLVM/Clang[3] 컴파일러로 빌드되는 애플의 신규 프로그래밍 언어이다. 기존 Objective-C에 비해 클로저#프로그래밍 용어, 다중 리턴 타입, 네임스페이스, 제네릭, 타입 인터페이스 등 Objective-C에는 없었던 현대 프로그래밍 언어가 갖고 있는 기능을 많이 포함시켰으며, 이에 따라 일정한 성능 향상을 보이고 있다. Apple이 만든 언어답게 iOS와 iPadOS, macOS를 대상으로 한다.
2015년 스택 오버플로우 설문조사에서 가장 좋아하는 언어 1위를 달성하였다.
2. 개발 철학[편집]
Swift는 다음과 같이 코드의 표현력을 높이기 위한 다른 많은 기능을 제공합니다.
* 함수 포인터와 통합된 클로저#프로그래밍 용어
* 튜플 및 멀티플 반환 값
* 제네릭
* 범위 또는 컬렉션에서의 빠르고 간결한 반복
* 메소드, 확장 프로그램 및 프로토콜을 지원하는 구조
* 함수형 프로그래밍 패턴 (예: map 및 filter)
*
/try
/catch
를 사용한 기본 오류 처리throw
Swift가 현대적인 프로그래밍 언어인 이유.
WWDC에서 공개된 Swift의 특징은 Fast, Modern, Safe, Interactive이었으나, 이후 Safe(안정성), Fast(신속성), Expressive(표현성)로 바뀌었다.
어느 정도 하위 호환성도 보장하고 있어, 코드 내부에서 C나 Objective-C 코드를 섞거나 스크립트 언어처럼 프로그래밍할 수 있게 되어있다.
오른쪽 사진과 같이 WWDC Keynote에서는 RC4[4] 암호화 속도가 기존 Objective-C 대비 약 1.5배, Python 대비 220배라고 설명하고 있다. 하지만 Python은 일부러 다중 멀티스레드로 비교해서 싱글스레드 위주의 Python을 느리다고 까고 있으므로 저건 믿을 게 못 된다.
Swift의 개발자인 크리스 래트너[5] 본인이 직접 언급한 영향을 준 언어로는 Rust, Haskell, C\#, Python, Ruby 정도가 있다. 그 외 Kotlin 같은 언어의 영향도 물론 있겠지만, 여러 가지를 봤을 때 가장 강력한 흔적을 남긴 건 역시 Rust다. Rust에 C#을 가미해서 Apple 입맛으로 조리한 느낌. 사실 Kotlin도 위 언어들에서 영향을 받아 비슷한 방향으로 수렴 진화했다고 보는 게 맞다.
그 밖에도 Apple에서 Swift 보급을 위해 노력하는 모습이 보인다.
All of Cocoa and Cocoa Touch
Complete Xcode support
Swift language guide
Complete reference docs
Submit apps to App Store
2015년 6월 8일, WWDC 2015에서 Swift의 차기 버전이 발표되었으며, 소스를 공개한다고 발표했다.
OS X, iOS, Linux용으로 같은 해 가을에 배포될 예정이다. Swift 2에서는
do
/try
/catch
/throw
등 에러 확인 구문이 추가되었고, println()
함수가 print()
로 대체되었다.2015년 12월 4일 오픈 소스로 공개되었다. 2.2 및 3.0 개발버전이 배포중이며, OS X, iOS, watchOS, tvOS, Ubuntu LTS/일반 버전[6] 을 지원하고 있다. 아파치 라이선스 2.0으로 개발자, 교육자, 학생 등 모두에게 열려있다. Apple은 iOS, OS X, watchOS, tvOS, 그리고 Linux용 코드를 처리할 수 있는 OS X 및 Linux용 바이너리를 제공하고 커뮤니티를 개설해 사용자들이 Swift 소스 코드 개발에 직접 참여할 수 있도록 했다.
IBM은 서버사이드에서 Swift를 적극적으로 지원하고 있다. IBM은 Swift를 리눅스 서버에서 실행하여 브라우저에서 볼 수 있고 다른 사람과 공유할 수 있는 IBM Swift Sandbox라는 것을 발표했으며[7] , 자사의 클라우드 컴퓨팅 플랫폼인 Bluemix에서도 Swift를 지원하고 있다. 또한, Microsoft Windows용 컴파일러도 5.3 버전과 함께 공개했다. # 현재 Swift는 macOS 환경에서 iOS용 앱을 개발하는 데 주로 쓰인다.
다음은 Apple 개발자 홈페이지에 나와있는 기타 사항이다. 원문 한국
* Playgrounds and REPL in Xcode
Xcode의 Playground 및 REPL* Read-Eval-Print-Loop (REPL)
REPL* Package Manager
Package Manager* Fast and Powerful
빠르고 강력한 성능* Designed for Safety
안전 중심 설계* Objective-C Interoperability
Objective-C 상호 운용성
3. Objective-C와의 관계[편집]
많은 사람들이 Objective-C를 이제 묻혀질 언어로만 생각하고 있지만, 의외로 그렇지 않다.
Swift 프로젝트에서도 Objective-C는 아무런 제약 없이 사용 가능하다(!!). Swift의 컴파일러 백엔드와 Objective-C의 컴파일러 백엔드는 둘다 LLVM으로 동일하며, 어떤 언어를 사용해서 코드를 작성하더라도 같은 형태의 중간언어로 번역되어 컴파일 된다.
실전에서는 Swift에서 기존 Objective-C로 작성되어 있는 라이브러리를 사용하기 위해서라도 Objective-C는 반쯤 현역으로 사용된다. 프로젝트 내에서 대부분의 코드는 Swift로 작성되지만, Objective-C 기반으로 작성되어 있는 기존 코드가 상당수이기 때문에, Swift가 정착된 후에도 한동안 Objective-C의 사용은 계속될 것으로 보인다.
현재는 많은 라이브러리가 Swift로 재작성되거나 Swift만으로 작성되고 있으며 Objective-C로 작성된 라이브러리라고 해도 Xcode 등의 IDE가 Swift에서 바로 사용할 수 있도록 적절히 처리해주기 때문에, Objective-C로 만들어진 라이브러리를 직접 수정할 일만 없다면 Objective-C를 전혀 몰라도 Swift로 작성하는데에 아무런 문제가 없다. 굳이 신규 프로젝트를 Objective-C로 진행하는 경우는 거의 없으므로 Swift를 주력 언어로 사용한다면 Objective-C는 코드 리딩 정도만 할 줄 알면 충분하다. (어차피 Swift나 Obj-C나 Cocoa Framework 기반이라 코드 리딩을 위해 별도로 공부할 필요도 없다.)
3.1. Objective-C 파일 사용 방법[편집]
Xcode의 Swift 프로젝트 내에서 Objective-C (.m) 파일을 만들게 되면 유저에게 물어본 후, Bridging-header.h 파일을 만들어주게 된다. 이 파일 안에, 자신이 만든 헤더파일들을 import 해주면 Swift 코드에서도 사용이 가능해진다.
4. 버전[편집]
4.1. Swift Playgrounds[편집]
Apple에서 지대한 관심을 가지고 있는지 매년 Swift Playgrounds에 대해 안내하고 있다.
↓ 관련 영상 보기
4.2. Swift 3[편집]
제네릭도 개선된다. 라이브러리 전반에 걸쳐 제네릭을 사용해 Swift 3.0에서는 제네릭 사용이 완성될 것으로 보인다. 타입 시스템 클린업과 문서화도 주목된다. 개발팀은 Swift 3.0에서 "다양한 서브 타이핑, 타입 시스템의 전환 규칙, 컴파일러 타입 체커 내에서의 구현 등을 재검토하고 문서화 할 것"이라고 예고했다. 그리고 Firefox 엔진을 위해 개발한 Rust 언어의 Ownership 기반 메모리 관리 모델이 개발자들 사이에 호평이 높아지자 이를 적극적으로 도입할 것이라고 한다.
정제와 집중 측면도 있다. 이 부분에 대해서는 자세한 정보가 부족하지만, 개발팀은 관련 문서를 통해 "그동안 Swift는 빠른 발전을 거듭해 왔고 이 과정에서 언어 전체와 잘 맞지 않는 기능이나 라이브러리 API가 추가됐다"며 "Swift 3.0은 이런 부분을 제거하거나 개선해 Swift의 전반적인 일관성을 개선할 것"이라고 설명했다. 또한, Swift 3.0에서는 API 개발자를 위한 새로운 디자인 지침이 나올 것으로 보인다.
4.3. Swift 4[편집]
2017년 9월 19일, Xcode 9에 포함되어 새롭게 등장한 Swift이다.
인간으로 비유하자면 Swift 3까지는 영유아기, Swift 4부터는 청소년기로 생각해도 좋을 것 같다. Swift 4 컴파일러는 Swift 3, Swift 4, 혼합 모드 3가지를 지원하는데 이것은 Swift 3에서 4로 이동하는 것을 사용자 마음대로 할 수 있게 되는 것이다. Apple은 이에 대하여 "Swift 3는 소스 수준 안정성을 고려하여 언어를 설정했으며, 이제 Swift 4는 앞으로 발전시켜 나갈 기능으로 소스 호환성을 제공합니다."라고 설명하고 있다. Swift 3에서 이미 언어가 완성되었고, Swift 4는 일종의 확장팩인 셈이다.Swift 4는 Swift 3의 강점을 바탕으로 만들어졌습니다. 훨씬 더 견고하고 안정적이며, Swift 3와의 소스 코드 호환성을 제공하고, 표준 라이브러리를 개선하며, 스마트 키 경로 및 직렬화와 같은 기능을 추가하는 동시에 이 모든 성능을 갖추고도 빌드 시간은 단축하고 앱 바이너리 크기는 줄였습니다.
Apple 개발자 웹페이지의 Swift 中
2018년 3월 29일 Swift 4.1이 출시되었고, 동년 7월 11일을 기준으로 Swift 4.2가 개발중이다. 2014년 공개 이후로, 2015년 Swift 2, 2016년 Swift 3, 2017년 Swift 4가 차례로 나오다가 2018년에는
4.3.1. 새로운 기능[편집]
* 유니코드 정확성을 유지하는 문자열 사용이 더 빠르고 용이하며 하위 문자열 생성, 사용 및 관리를 위한 지원 추가
* Swift 유형의 타입 세이프하고 효율적이며 확장 가능한 키 값 코딩을 위해 스마트 키 경로 제공
* 딕셔너리 및 세트 유형을 생성하고 변경하는 기능 향상
* struct 및 enum 유형에 대해 아카이브 및 직렬화 지원을 확장하고, JSON 및 plist와 같은 외부 형식으로 직렬화하기 위한 타입 세이프 제공
* 메모리에 대한 독점적인 접근
4.4. Swift 5[편집]
이미 Swift 4부터 페이즈가 느려졌고, 그 이유가 언어가 어느 정도 완성되었기 때문인 만큼, Swift 5에서는 꽤나 많은 기능이 추가될 것으로 예상된다.
2019년 3월 25일, Swift 5가 릴리스되었다.
5. The Swift Programming Language[편집]
양이 꽤 방대한데, 처음 60페이지 정도의 A Swift Tour만 읽어도 언어를 이해하는데 도움을 받을 수 있다. 그러다 문제가 생기거나, 더 자세히 알고 싶다면 Language Guide를 읽게 되는데, 이게 약 900페이지의 분량이다. 그밖에도 정말 사소한 부분까지 궁금하다면 Language Reference, 옛 버전과 현재 버전 사이에 어떤 변화가 있었는지 궁금하다면 Revision History를 읽어보자.
6. 문제점[편집]
Objective-C에 비해 문제가 있었는데 초기 3년 동안에 엄청난 속도로 업데이트를 하면서 언어동작, API가 계속 바뀌었다. 그리고 이에 따른 고생은 전부 프로그래머의 몫이다. Swift 2 기반으로 코드를 다 짜 놓았는데 Swift 3.0이 배포되며 코드가 싹 다 바뀌었고, 4.0에서 또 바뀌어 버려서 코드를 하나하나 수정해 주어야하는 일이 발생한 것. 대표적인 문제로 Swift 3.0에 오면서 조금만 큰 프로젝트를 개발하다 보면 Code Completion 기능은 먹통이 된다. 이 부분에 대해서 Apple은 Swift 4 또는 4.2[12] 로 마이그레이션할 수 있도록 가이드를 제공하고 있다. Migration to Swift 4 Migration to Swift 4.2
LLVM/Clang의 아름다운 실시간 오류 검출 기능은 Xcode의 컨디션에 따라서 나왔다 말았다 한다. 이미 Apple 개발자 포럼에는 이와 관련된 문제가 많이 보고되고 있다.
- 컴파일 속도
- Xcode의 전반적인 반응 속도
- 문자열 조작
[4, 8)
에 해당하는 부분 문자열을 짤라오고 싶다면 다음과 같은 걸 해야한다.[13]let text = "The Swift Programming Language"
let subText = text[text.index(text.startIndex, offsetBy: 4)..<text.index(text.startIndex, offsetBy: 8)]
// subText == "Swif"
7. 개발 환경[편집]
Swift를 공식적으로 지원하는 통합 개발 환경으로는
8. 미래[편집]
데스크탑 OS를 대부분 점령한 마이크로소프트가 적극 지원하는 C\#이나 DBMS 업계의 최강자 오라클이 적극 지원하는 Java[15] 처럼 애플이 적극적으로 밀어주고 있어서 재벌 아버지를 둔 금수저 외아들처럼 태어나자마자 이미 성공을 보장받아 잘 나가고 있다. 거기다 잘 안된다 싶으면 바로 내쳐버리는 곳과는 달리, Apple은 한번 밀기로 작정하면 20년 30년 동안 꾸준히 밀어준 역사가 있어서, 다들 묻지도 따지지도 않고 한마음으로 Swift로 달려갔다.
2018년 7월 기준으로 등장한지 4년이 조금 넘었고 주로 iOS 개발에서만 쓰이고 있으나, 프로그래밍 언어 월간 점유율 순위에서 기존에 iOS 및 macOS 개발용으로 널리 쓰이던 Objective-C는 10등, Swift는 11등을 차지하고 있다. 점유율 차이는 0.041%p로, 사실상 동급에 랭크되고 있다. 2021년 1월 기준으로 Swift는 Objective-C를 제치고 TIOBE 순위 13위에 올랐다. (Objective-C는 18위로 하락) 레거시 코드 때문에 Objective-C가 당장 버려지지는 않겠지만 iOS의 미래는 Swift라는 걸 몸소 증명하는 중이다.
심지어는 경쟁사인 구글도 Java API 저작권을 둘러싼 오라클과의 분쟁의 영향으로 안드로이드의 언어를 Swift로 전환할 지 고려 중이라는 소문이 나왔을 정도. 물론 이건 안드로이드의 Java 생태계를 포기하는 것과 마찬가지라서 어느 정도 무리가 있는 이야기였고, 결국 Google I/O 2017을 통해 Java와 동일한 JVM 언어인 Kotlin을 공식 언어로 발표하였다. 하지만 일단 아직도 Swift를 통해 앱 개발을 할 수 있게끔 한다는 계획은 내부적으로 논의가 되는 듯하다. 구글의 차세대 OS인 퓨시아에서는 Swift 코드가 구동될 수 있도록 준비 중이라고 한다. #
Java와 C#은 매우 뛰어난 언어이고 인기도 높지만, 가상머신 상에서 바이트코드로 실행되는 언어라 실행 속도 면에서 태생적 약점이 있는데, Swift는 Java와 C#의 장점을 거의 다 가지고 있으면서도 LLVM을 기반으로 C/C++/Objective-C처럼 기계어로 최종 번역된다는 점에서 일단 성능상의 우위가 있다. 참고로, Kotlin은 JVM 언어이기는 하지만 LLVM을 이용한 네이티브 컴파일도 가능하다. 이쪽도 구글의 지원에 힘입어 Swift 못지않게 빠른 점유율 상승을 보이고 있다. Java/C#의 장점과 C/C++/Objective-C의 장점의 행복한 결합. 다만 Apple이 모바일에서는 최강자이지만 데스크탑과 서버 시장에서는 존재감이 미미하기 때문에 Mac을 제외한 데스크톱 시장에서의 보급에는 한계가 있다.